Tegra: retrieve power domain tree from the platforms
authorVarun Wadekar <[email protected]>
Fri, 28 Apr 2017 15:43:33 +0000 (08:43 -0700)
committerVarun Wadekar <[email protected]>
Wed, 16 Jan 2019 18:08:08 +0000 (10:08 -0800)
The platform code generates the power domain tree. The handler to
retrieve the tree should also reside in the platform code.

This patch moves the plat_get_power_domain_tree_desc() to the
individual platforms.

Change-Id: Iaafc83ed381d83129501111ef655e3c58a8a553f
Signed-off-by: Anthony Zhou <[email protected]>
Signed-off-by: Varun Wadekar <[email protected]>
plat/nvidia/tegra/common/tegra_topology.c
plat/nvidia/tegra/soc/t132/plat_setup.c
plat/nvidia/tegra/soc/t186/plat_setup.c
plat/nvidia/tegra/soc/t210/plat_setup.c

index 893f28ff24137b6f5b8a434ab54301b485f6ecc3..c423d8c3ebfd341e97c9f8df4ed87fb343ecc3a8 100644 (file)
@@ -7,19 +7,11 @@
 #include <platform_def.h>
 
 #include <arch.h>
+#include <platform.h>
 #include <lib/psci/psci.h>
 
-extern const unsigned char tegra_power_domain_tree_desc[];
 #pragma weak plat_core_pos_by_mpidr
 
-/*******************************************************************************
- * This function returns the Tegra default topology tree information.
- ******************************************************************************/
-const unsigned char *plat_get_power_domain_tree_desc(void)
-{
-       return tegra_power_domain_tree_desc;
-}
-
 /*******************************************************************************
  * This function implements a part of the critical interface between the psci
  * generic layer and the platform that allows the former to query the platform
@@ -28,20 +20,25 @@ const unsigned char *plat_get_power_domain_tree_desc(void)
  ******************************************************************************/
 int plat_core_pos_by_mpidr(u_register_t mpidr)
 {
-       unsigned int cluster_id, cpu_id;
+       u_register_t cluster_id, cpu_id;
+       int result;
+
+       cluster_id = (mpidr >> (u_register_t)MPIDR_AFF1_SHIFT) & (u_register_t)MPIDR_AFFLVL_MASK;
+       cpu_id = (mpidr >> (u_register_t)MPIDR_AFF0_SHIFT) & (u_register_t)MPIDR_AFFLVL_MASK;
 
-       cluster_id = (mpidr >> MPIDR_AFF1_SHIFT) & MPIDR_AFFLVL_MASK;
-       cpu_id = (mpidr >> MPIDR_AFF0_SHIFT) & MPIDR_AFFLVL_MASK;
+       result = (int)cpu_id + ((int)cluster_id * 4);
 
-       if (cluster_id >= PLATFORM_CLUSTER_COUNT)
-               return PSCI_E_NOT_PRESENT;
+       if (cluster_id >= (u_register_t)PLATFORM_CLUSTER_COUNT) {
+               result = PSCI_E_NOT_PRESENT;
+       }
 
        /*
         * Validate cpu_id by checking whether it represents a CPU in
         * one of the two clusters present on the platform.
         */
-       if (cpu_id >= PLATFORM_MAX_CPUS_PER_CLUSTER)
-               return PSCI_E_NOT_PRESENT;
+       if (cpu_id >= (u_register_t)PLATFORM_MAX_CPUS_PER_CLUSTER) {
+               result = PSCI_E_NOT_PRESENT;
+       }
 
-       return (cpu_id + (cluster_id * 4));
+       return result;
 }
index f72b73ed52d4f2c495ca033b47b59dcbc175de4c..3f9cda965fa3c062d1645a148a9c02b335ed3329 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -7,25 +7,10 @@
 #include <arch_helpers.h>
 #include <common/bl_common.h>
 #include <lib/xlat_tables/xlat_tables_v2.h>
-
+#include <platform.h>
 #include <tegra_def.h>
 #include <tegra_private.h>
 
-/*******************************************************************************
- * The Tegra power domain tree has a single system level power domain i.e. a
- * single root node. The first entry in the power domain descriptor specifies
- * the number of power domains at the highest power level.
- *******************************************************************************
- */
-const unsigned char tegra_power_domain_tree_desc[] = {
-       /* No of root nodes */
-       1,
-       /* No of clusters */
-       PLATFORM_CLUSTER_COUNT,
-       /* No of CPU cores */
-       PLATFORM_CORE_COUNT,
-};
-
 /* sets of MMIO ranges setup */
 #define MMIO_RANGE_0_ADDR      0x50000000
 #define MMIO_RANGE_1_ADDR      0x60000000
@@ -54,6 +39,29 @@ const mmap_region_t *plat_get_mmio_map(void)
        return tegra_mmap;
 }
 
+/*******************************************************************************
+ * The Tegra power domain tree has a single system level power domain i.e. a
+ * single root node. The first entry in the power domain descriptor specifies
+ * the number of power domains at the highest power level.
+ *******************************************************************************
+ */
+const unsigned char tegra_power_domain_tree_desc[] = {
+       /* No of root nodes */
+       1,
+       /* No of clusters */
+       PLATFORM_CLUSTER_COUNT,
+       /* No of CPU cores */
+       PLATFORM_CORE_COUNT,
+};
+
+/*******************************************************************************
+ * This function returns the Tegra default topology tree information.
+ ******************************************************************************/
+const unsigned char *plat_get_power_domain_tree_desc(void)
+{
+       return tegra_power_domain_tree_desc;
+}
+
 unsigned int plat_get_syscnt_freq2(void)
 {
        return 12000000;
index 15dbd163907db3f12c54baddbebb6afb55460b30..d6513ebc7341a82dc335e1575dcc3fb922b46139 100644 (file)
@@ -54,6 +54,14 @@ const unsigned char tegra_power_domain_tree_desc[] = {
        PLATFORM_MAX_CPUS_PER_CLUSTER
 };
 
+/*******************************************************************************
+ * This function returns the Tegra default topology tree information.
+ ******************************************************************************/
+const unsigned char *plat_get_power_domain_tree_desc(void)
+{
+       return tegra_power_domain_tree_desc;
+}
+
 /*
  * Table of regions to map using the MMU.
  */
index c7f7165c0a7fdcdc29ef4cfb66f31ee1da25c818..7841f84f8c64e0badb0f9c9e8c51a1d79871264a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -8,27 +8,10 @@
 #include <common/bl_common.h>
 #include <drivers/console.h>
 #include <lib/xlat_tables/xlat_tables_v2.h>
-
+#include <platform.h>
 #include <tegra_def.h>
 #include <tegra_private.h>
 
-/*******************************************************************************
- * The Tegra power domain tree has a single system level power domain i.e. a
- * single root node. The first entry in the power domain descriptor specifies
- * the number of power domains at the highest power level.
- *******************************************************************************
- */
-const unsigned char tegra_power_domain_tree_desc[] = {
-       /* No of root nodes */
-       1,
-       /* No of clusters */
-       PLATFORM_CLUSTER_COUNT,
-       /* No of CPU cores - cluster0 */
-       PLATFORM_MAX_CPUS_PER_CLUSTER,
-       /* No of CPU cores - cluster1 */
-       PLATFORM_MAX_CPUS_PER_CLUSTER
-};
-
 /* sets of MMIO ranges setup */
 #define MMIO_RANGE_0_ADDR      0x50000000
 #define MMIO_RANGE_1_ADDR      0x60000000
@@ -57,6 +40,31 @@ const mmap_region_t *plat_get_mmio_map(void)
        return tegra_mmap;
 }
 
+/*******************************************************************************
+ * The Tegra power domain tree has a single system level power domain i.e. a
+ * single root node. The first entry in the power domain descriptor specifies
+ * the number of power domains at the highest power level.
+ *******************************************************************************
+ */
+const unsigned char tegra_power_domain_tree_desc[] = {
+       /* No of root nodes */
+       1,
+       /* No of clusters */
+       PLATFORM_CLUSTER_COUNT,
+       /* No of CPU cores - cluster0 */
+       PLATFORM_MAX_CPUS_PER_CLUSTER,
+       /* No of CPU cores - cluster1 */
+       PLATFORM_MAX_CPUS_PER_CLUSTER
+};
+
+/*******************************************************************************
+ * This function returns the Tegra default topology tree information.
+ ******************************************************************************/
+const unsigned char *plat_get_power_domain_tree_desc(void)
+{
+       return tegra_power_domain_tree_desc;
+}
+
 /*******************************************************************************
  * Handler to get the System Counter Frequency
  ******************************************************************************/